1. Field
Embodiments of the invention relate to software development. More specifically, embodiments of the invention relate to debugging of software.
2. Background
In the course of software development and/or usage, a bug is said to have occurred in executing code when the behavior of the code is different than expected for the set of inputs. Bugs can vary from catastrophic failure to invalid or anomalous data. In the normal course of operation software code may execute within a virtual machine (VM) that applies a productive interpreter loop to the process statements to execute the code. When code requires debugging, a new VM must be started with a debugging interpreter loop to be applied to the process statements of the code subject to debugging. The debugging interpreter loop provides various tools to facilitate identification and remedy of the bug. However, additional administrative overhead makes a debugging interpreter loop much less efficient than the productive interpreter loop, which would be applied in the normal course. The need to start a new VM and/or restart the existing VM to provide for debugging creates a number of problems. Creation of an additional VM or restarting of existing VM is resource intensive. Moreover, fixing the bug generally requires recreation of the bug. In some cases, this may be difficult or impossible, in the artificially isolated environment of the newly started debugging VM. For example, where the bug is caused by a race condition, loading and behavior of the debugging VM will be different than that of the productive VM, such that reproducing the anomaly may not be possible in the debugging environment.